#ifndef INTEGRATEUR_HPP
#define INTEGRATEUR_HPP

#include "Fonction.hpp"

namespace CalculIntegral
{

  /**
   * Classe réalisant une intégration numérique par l'algorithme de
   * Runge-Kutta.
   *
   * @author Johan "Solo" Luisier
   * @date 29 Juillet 2011
   */
  class Integrateur
  {
  public:
    Integrateur( const Fonction& fct,
		 const Point& valeur = Point( 0. ),
		 const double& taille = 1.e-8 );
    virtual ~Integrateur();

    void setFonction( const Fonction& fct );

    void setValeurInitiale( const Point& valeur );
    const Point& valeurInitiale() const;

    void setTailleEtape( const double& taille );
    const double& tailleEtape() const;

    Point operator()( const Point& inf,
		      const Point& sup ) const;
  protected:
    Fonction FonctionPtr;

    double nombreEtapes( const Point& inf,
			 const Point& sup ) const;

    Point rungeKutta4( Point& variables,
		       const Point& increments,
		       const Point& valeur) const;

    Point ValeurInitiale;

    double TailleEtape;

  private:
  
  };

}
#endif // INTEGRATEUR_HPP
